﻿#ifndef _ETHER_H_
#define _ETHER_H_

#include <stdbool.h>
#include "debug.h"
#include "net_err.h"
#include "pktbuf.h"

// 防止编译器内存对齐对数据进行填充
#pragma pack(1)

// 以太网包头结构
typedef struct _ether_hdr_t
{
    uint8_t dest[ETHER_HWA_SIZE];
    uint8_t src[ETHER_HWA_SIZE];
    uint16_t protocol; // 协议类型
} ether_hdr_t;

// 以太网数据包结构类型
typedef struct _ether_pkt_t
{
    ether_hdr_t hdr; // 包头
    uint8_t data[ETHER_MTU];
} ether_pkt_t;

#pragma pack()

net_err_t ether_init();
const uint8_t *ether_broadcast_addr();
net_err_t ether_raw_out(netif_t *netif, uint16_t protocol, const uint8_t *dest, pktbuf_t *buf);

#endif